# 编译目标与路径配置
TARGET_DEBUG := simplelock-d       # Debug模式可执行文件
TARGET_RELEASE := simplelock-r     # Release模式可执行文件
INSTALL_PATH := /usr/local/bin/simplelock  # 安装路径
RAYLIB_INC := -I include/          # Raylib头文件路径
RAYLIB_LIB := -L lib/ -l:libraylib.a  # Raylib静态库（指定文件名避免冲突）
LIBS := -lpam -lm                  # 系统依赖库（PAM认证+数学库）

# 通用编译选项（所有模式共享）
COMMON_FLAGS := -std=c11 -Wall -Wextra -Wpedantic -Wimplicit-function-declaration -fstack-protector-strong -D_FORTIFY_SOURCE=2

# Debug模式专属选项（调试友好，不优化）
DEBUG_FLAGS := $(COMMON_FLAGS) -DDEBUG_MODE=1 -ggdb -O0 -fno-omit-frame-pointer

# Release模式专属选项（体积最小化，性能最优）
RELEASE_FLAGS := $(COMMON_FLAGS) -O3 -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,-s -DNDEBUG

# 默认目标：同时构建Debug和Release
all: debug release
	@echo "========================================"
	@echo "构建完成！"
	@echo "Debug版本: $(TARGET_DEBUG) （含调试信息，支持ESC退出）"
	@echo "Release版本: $(TARGET_RELEASE) （体积优化，性能最优）"
	@echo "========================================"

# Debug模式构建
debug: $(TARGET_DEBUG)

$(TARGET_DEBUG): simplelock.c
	@echo "正在构建 Debug 版本..."
	gcc $< -o $@ $(DEBUG_FLAGS) $(RAYLIB_INC) $(RAYLIB_LIB) $(LIBS)
	@# 显示Debug版本信息（大小、编译时间）
	@du -sh $@ | awk '{print "Debug版本体积: " $$1}'
	@date +"Debug版本编译时间: %Y-%m-%d %H:%M:%S"

# Release模式构建（体积优化核心）
release: $(TARGET_RELEASE)

$(TARGET_RELEASE): simplelock.c
	@echo "正在构建 Release 版本（体积优化）..."
	gcc $< -o $@ $(RELEASE_FLAGS) $(RAYLIB_INC) $(RAYLIB_LIB) $(LIBS)
	@# 显示Release版本信息（优化后体积、编译时间）
	@du -sh $@ | awk '{print "Release版本体积: " $$1}'
	@date +"Release版本编译时间: %Y-%m-%d %H:%M:%S"

# 安装Debug版本（开发测试用）
install-debug: debug
	@echo "正在安装 Debug 版本到 $(INSTALL_PATH)..."
	cp $(TARGET_DEBUG) $(INSTALL_PATH)
	chmod 755 $(INSTALL_PATH)  # 设置权限（所有者可读写，其他用户只读执行）
	@echo "Debug版本安装完成！可执行: simplelock"

# 安装Release版本（生产环境用）
install-release: release
	@echo "正在安装 Release 版本到 $(INSTALL_PATH)..."
	cp $(TARGET_RELEASE) $(INSTALL_PATH)
	chmod 755 $(INSTALL_PATH)
	@echo "Release版本安装完成！可执行: simplelock"

# 卸载（删除安装的可执行文件）
uninstall:
	rm /usr/local/simplelock

# 清理构建产物（Debug/Release可执行文件）
clean:
	@echo "正在清理构建产物..."
	rm -f $(TARGET_DEBUG) $(TARGET_RELEASE)
	@echo "清理完成！已删除 $(TARGET_DEBUG) 和 $(TARGET_RELEASE)"

# 伪目标声明（避免与同名文件冲突）
.PHONY: all debug release install-debug install-release uninstall clean
    